package cz.fi.muni.pb138.spring2013.dtd2xsd.visitor.interfaces;

import cz.fi.muni.pb138.spring2013.dtd2xsd.entities.Attribute;
import cz.fi.muni.pb138.spring2013.dtd2xsd.entities.ChoiceRestriction;
import cz.fi.muni.pb138.spring2013.dtd2xsd.entities.Document;
import cz.fi.muni.pb138.spring2013.dtd2xsd.entities.ElementRestriction;
import cz.fi.muni.pb138.spring2013.dtd2xsd.entities.SequenceRestriction;
import cz.fi.muni.pb138.spring2013.dtd2xsd.entities.SimpleElementRestriction;

/**
 * Interface represents Visitor pattern for separate an algorithm for different restrictions 
 * of object representation between DTD and XML Schmema.
 * 
 * @author Slavomir Krupa
 * @author <a href="mailto:ramikvl at gmail dot com">Vlastislav Ramik</a>
 */
public interface Visitor {

    /**
     * Method for visit the 
     * {@link cz.fi.muni.pb138.spring2013.dtd2xsd.entities.Document Document}
     * 
     * @param aThis Document to visit
     */
    public void visit(Document aThis);

    /**
     * Method for visit the 
     * {@link cz.fi.muni.pb138.spring2013.dtd2xsd.entities.SequenceRestriction SequenceRestriction}
     * 
     * @param aThis SequenceRestriction to visit
     */
    public void visit(SequenceRestriction aThis);

    /**
     * Method for visit the 
     * {@link cz.fi.muni.pb138.spring2013.dtd2xsd.entities.ChoiceRestriction ChoiceRestriction}
     * 
     * @param aThis ChoiceRestriction to visit
     */
    public void visit(ChoiceRestriction aThis);

    /**
     * Method for visit the 
     * {@link cz.fi.muni.pb138.spring2013.dtd2xsd.entities.ElementRestriction ElementRestriction}
     * 
     * @param aThis ElementRestriction to visit
     */
    public void visit(ElementRestriction aThis);

    /**
     * Method for visit the 
     * {@link cz.fi.muni.pb138.spring2013.dtd2xsd.entities.Attribute Attribute}
     * 
     * @param aThis Attribute to visit
     */
    public void visit(Attribute aThis);

    /**
     * Method for visit the 
     * {@link cz.fi.muni.pb138.spring2013.dtd2xsd.entities.SimpleElementRestriction SimpleElementRestriction}
     * 
     * @param aThis SimpleElementRestriction to visit
     */
    public void visit(SimpleElementRestriction aThis);
}
